//package com.ship.dispatch.service.fob.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.fasterxml.jackson.databind.node.ObjectNode;
//import com.ship.common.core.exception.BusException;
//import com.ship.common.core.web.domain.BaseResultCode;
//import com.ship.common.security.utils.SecurityUtils;
//import com.ship.dispatch.bean.SpDispatchSchemeExecute;
//import com.ship.dispatch.bean.fob.*;
//import com.ship.dispatch.bo.SpBoatsActualCompatibleBo;
//import com.ship.dispatch.bpm.utils.JsonUtils;
//import com.ship.dispatch.bpm.utils.TemplateParamUtils;
//import com.ship.dispatch.bpm.vo.ManageEntityVo;
//import com.ship.dispatch.mapper.fob.SpFobReturnSalesZzgcjrMapper;
//import com.ship.dispatch.mapper.fob.SpFobZzgcjrMapper;
//import com.ship.dispatch.service.SpBoatsActualCompatibleService;
//import com.ship.dispatch.service.SpDispatchSchemeExecuteService;
//import com.ship.dispatch.service.fob.SpFobFileRecordService;
//import com.ship.dispatch.service.fob.SpFobTemplateService;
//import com.ship.dispatch.service.fob.SpFobZzgcjrDesService;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.*;
//import java.util.stream.Collectors;
//
//@Service
//public class SpFobZzgcjrDesServiceImpl extends FobBaseServiceImpl<SpFobReturnSalesZzgcjrMapper, SpFobReturnSalesZzgcjr> implements SpFobZzgcjrDesService {
//
//    @Autowired(required = false)
//    SpFobReturnSalesZzgcjrMapper mapper;
//
//    @Autowired
//    SpFobFileRecordService spFobFileRecordService;
//    @Autowired
//    SpDispatchSchemeExecuteService schemeDetailService;
//    @Autowired
//    SpFobTemplateService spFobTemplateService;
//
//    @Override
//    public void updateEntity(ManageEntityVo manageEntityVo, String json) {
//        SpFobReturnSalesZzgcjr object = JsonUtils.jsonToObject(json,SpFobReturnSalesZzgcjr.class);
//        SpFobReturnSalesZzgcjr his = mapper.selectOne(new LambdaQueryWrapper<SpFobReturnSalesZzgcjr>().eq(SpFobReturnSalesZzgcjr::getProceeInstanceId,manageEntityVo.getProcessInstanceId()).ne(SpFobReturnSalesZzgcjr::getStatus,-2));
//        if(manageEntityVo.getOperationType()==1) {
//            object.setStatus(1);
//        }
//        if(his==null){ // 新增
//            object.setSchemeDetailId(manageEntityVo.getSchemeDetailId());
//            object.setProceeInstanceId(manageEntityVo.getProcessInstanceId());
//            object.setTaskId(manageEntityVo.getTaskId());
//            mapper.insert(object);
//        }else { // 修改
//            object.setId(his.getId());
//            BeanUtils.copyProperties(object,his);
//            mapper.updateById(his);
//            // 处理多余文件记录
//            List<String> ids = new ArrayList<>();
//            if(his.getFiels()!=null && his.getFiels().length()>0){
//                String temp = his.getFiels();
//                String[] fieldIds = temp.split(",");
//                ids =  Arrays.stream(fieldIds).collect(Collectors.toList());
//                //ids.retainAll(Collections.singleton(null));
//            }
//            spFobFileRecordService.deleteOtherFileRecor(his.getId(),ids);
//        }
//    }
//
//    @Override
//    public SpFobBaseBean getBaseBeanByInstanceId(String id) {
//        return mapper.selectOne(new LambdaQueryWrapper<SpFobReturnSalesZzgcjr>().eq(SpFobReturnSalesZzgcjr::getProceeInstanceId,id).ne(SpFobReturnSalesZzgcjr::getStatus,-2));
//    }
//    @Override
//    public void  saveEntity(SpFobBaseBean bean){
//        SpFobReturnSalesZzgcjr spFobZzgcjr = new SpFobReturnSalesZzgcjr();
//        BeanUtils.copyProperties(bean,spFobZzgcjr);
//        this.save(spFobZzgcjr);
//    }
//
//    @Override
//    public void updateEntityById(SpFobBaseBean bean) {
//        SpFobReturnSalesZzgcjr spFobZzgcjr = new SpFobReturnSalesZzgcjr();
//        BeanUtils.copyProperties(bean,spFobZzgcjr);
//        this.updateById(spFobZzgcjr);
//    }
//
//    @Override
//    public Object getFormData(String id,Long serviceId) {
//        SpFobReturnSalesZzgcjr spFobZzgcjr = null;
//        if(serviceId!=null){
//            spFobZzgcjr = mapper.selectById(serviceId);
//        }else {
//            spFobZzgcjr = mapper.selectOne(new LambdaQueryWrapper<SpFobReturnSalesZzgcjr>().eq(SpFobReturnSalesZzgcjr::getProceeInstanceId,id).ne(SpFobReturnSalesZzgcjr::getStatus,-2));
//        }
//        if(spFobZzgcjr==null){
//            return null;
//        }
//        Map<String,Object> map = JsonUtils.jsonToMap(JsonUtils.objectToJson(spFobZzgcjr), Object.class);
//        if(spFobZzgcjr.getFiels()!=null){
//            String[] ids = spFobZzgcjr.getFiels().split(",");
//            List<Long> resId = new ArrayList<>();
//            for(String tempId:ids){
//                resId.add(Long.parseLong(tempId));
//            }
//            List<SpFobFileRecord> spFobFileRecordList =  spFobFileRecordService.listByIds(resId);
//            map.put("fiels",spFobFileRecordList);
//        }
//        return map;
//    }
//    @Override
//    public String  getTemplateParam(ManageEntityVo manageEntityVo) {
//        SpDispatchSchemeExecute schemeDetail = schemeDetailService.getExceuteByInstanceId(manageEntityVo.getProcessInstanceId());
//        Map<String,String> map = new HashMap<>();
//        if(schemeDetail!=null){
//            Map<String,String> tempMap = JsonUtils.jsonToMap(JsonUtils.objectToJson(schemeDetail),String.class);
//            for(String key:tempMap.keySet()){
//                map.put("spDispatchSchemeDetail."+key,tempMap.get(key));
//            }
//        }
//        ObjectNode json = manageEntityVo.getData();
//        if(json!=null){
//            Map<String,String> tempMap = JsonUtils.jsonToMap(JsonUtils.objectToJson(json),String.class);
//            for(String key:tempMap.keySet()){
//                map.put("spFobReturnSalesZzgcjr."+key,tempMap.get(key));
//            }
//            // 默认发件人 当前登录用户
//            //map.put("spFobZzgcjr.sendRecipient", SecurityUtils.getUsername());
//        }
//        SpFobReturnSalesZzgcjr spFobZzgcjr = JsonUtils.jsonToObject(JsonUtils.objectToJson(json),SpFobReturnSalesZzgcjr.class);
//        String templateId = spFobZzgcjr.getTemplateId();
//        if(templateId==null){
//            throw  new BusException("请选模板后再生成模板正文", BaseResultCode.GENERAL_ERROR);
//        }
//        SpFobTemplate spFobTemplate = spFobTemplateService.getById(templateId);
//        String template = "";
//        if(spFobTemplate !=null){
//            template = TemplateParamUtils.processDynamicParams(spFobTemplate.getContent(),map);
//        }
//        return template;
//    }
//
//    @Override
//    public List<Long> findServieData(String processInstanceId){
//        List<SpFobReturnSalesZzgcjr> spFobBaseBeans =  mapper.selectList(new LambdaQueryWrapper<SpFobReturnSalesZzgcjr>().eq(SpFobReturnSalesZzgcjr::getProceeInstanceId,processInstanceId).orderByDesc(SpFobReturnSalesZzgcjr::getCreateDate));
//        List<Long> list = spFobBaseBeans.stream().map(SpFobBaseBean::getId).collect(Collectors.toList());
//        return list;
//    }
//
//    @Override
//    public SpFobReturnSalesZzgcjr findFormData(String processInstanceId) {
//        SpFobReturnSalesZzgcjr spFobZzgcjr = mapper.selectOne(new LambdaQueryWrapper<SpFobReturnSalesZzgcjr>().eq(SpFobReturnSalesZzgcjr::getProceeInstanceId,processInstanceId).ne(SpFobReturnSalesZzgcjr::getStatus,-2));
//        return spFobZzgcjr;
//    }
//
//    @Resource
//    SpBoatsActualCompatibleService spBoatsActualCompatibleService;
//    // 完成信息同步订单信息
//    @Override
//    public void createPayOrder(Long id) {
//        SpFobReturnSalesZzgcjr zzgcjr = this.getById(id);
//        SpBoatsActualCompatibleBo boatsActualCompatibleBo = new SpBoatsActualCompatibleBo();
//        SpDispatchSchemeExecute execute =  schemeDetailService.getExceuteByInstanceId(zzgcjr.getProceeInstanceId());
//        if(execute!=null){
//            boatsActualCompatibleBo.setImo(execute.getImo());
//            boatsActualCompatibleBo.setShipName(execute.getShipName());
//            boatsActualCompatibleBo.setVoyageNo(execute.getVoyageNo());
//            boatsActualCompatibleBo.setExpectedLoadingPort(execute.getExpectedLoadingPort());
//            boatsActualCompatibleBo.setExpectedLoadingDate(execute.getExpectedLoadingDate());
//            boatsActualCompatibleBo.setShipCompatibleDate(new Date());
//            boatsActualCompatibleBo.setExpectedUnloadingPort(execute.getExpectedUnloadingPort());
//            boatsActualCompatibleBo.setDispatchSchemeExecuteId(execute.getId());
//            boatsActualCompatibleBo.setServiceId(id);
//            boatsActualCompatibleBo.setPortType("1-装载港");
//            spBoatsActualCompatibleService.synchronShipShoreCompatibility(boatsActualCompatibleBo);
//        }
//    }
//}
